Programmable integrated circuit (IC) devices are a well-known type of IC that can be programmed to perform specified logic functions. One type of programmable IC, the field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), and so forth.
Each programmable tile typically includes both programmable interconnect and programmable circuitry. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable circuitry implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect and programmable circuitry are typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Another type of programmable IC is the complex programmable logic device, or CPLD. A CPLD includes two or more “function blocks” connected together and to input/output (I/O) resources by an interconnect switch matrix. Each function block of the CPLD includes a two-level AND/OR structure similar to those used in programmable logic arrays (PLAs) and programmable array logic (PAL) devices. In CPLDs, configuration data is typically stored on-chip in non-volatile memory. In some CPLDs, configuration data is stored on-chip in non-volatile memory, then downloaded to volatile memory as part of an initial configuration (programming) sequence.
Programmable ICs can also be implemented in other ways, e.g., using fuse or antifuse technology. The phrase “programmable IC” can include, but is not limited to these devices and further can encompass devices that are only partially programmable. For example, one type of programmable IC includes a combination of hard-coded transistor logic and a programmable switch fabric that programmably interconnects the hard-coded transistor logic.
The functionality of a programmable IC typically is controlled by providing data bits to the device for that purpose. The data bits are stored in an external memory and, from that memory, are provided to the programmable IC. The data bits specify the particular circuit, and thus, functions, to be provided by the programmable IC. Typically, a programmable read-only memory (PROM) is used to store the data bits specifying a particular circuit.
In some applications, a programmable IC is configured, or reconfigured as the case may be, frequently over a given period of time. For example, some applications require that the programmable IC be reloaded with a different set of data bits hundreds or thousands of times per day. Each time a different set of data bits is loaded into the programmable IC, the PROM first must be loaded with the set of data bits. Thus, the PROM is written to and read from approximately the same number of times as the programmable IC is reconfigured. Due to the limited number of read and/or write cycles available in the lifecycle of a PROM, one can see that using a PROM within an application requiring a high rate of programmable IC reconfiguration can lead to failure of the PROM as well as the system within which the programmable IC is disposed.